package com.dateConstruction._06_tree;

// 树抽象数据类型，T表示结点元素类型
public interface TTree<T> {
    // 判断是否空树
    boolean isEmpty();
    // 返回p结点的孩子结点个数
    int childCount(TreeNode<T> p);
    // 返回p结点的第i个(i >= 0)棵子树
    TreeNode<T> child(TreeNode<T> p, int i);
    // 插入x作为根节点
    void insert(T x);
    // 插入x作为p结点的第i(i >= 0)个孩子
    TreeNode<T> insert(TreeNode<T> p, int i, T x);
    // 删除p结点的第i(i >= 0)个结点
    void remove(TreeNode<T> p, int i);
    // 删除树的所有结点
    void clear();
    // 先根次序遍历树
    void preOrder();
    // 后根次序遍历树
    void postOrder();
    // 层次遍历树
    void levelOrder();
    // 返回树的结点树
    int size();
    // 树的高度
    int height();
    // 查找并返回首个与key相等元素结点
    TreeNode<T> search(T key);
    // 返回首个与key相等元素结点所在的层次
    int level(T key);
    // 查找并删除首个与key相等元素为根的子树
    void remove(T key);
    
    
    
}
